#ifndef UTILS_H
#define UTILS_H

// 也可以使用下面方式让头文件只包含一次
// #pragma once

#include <iostream>
#include <vector>

template<typename T>
void printVector(const std::vector<T>& vec) {
    for (const auto& item : vec) {
        std::cout << item << " ";
    }
    std::cout << "\n";
}

// 二叉树节点结构
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(): val(0), left(nullptr), right(nullptr){}
    TreeNode(int x): val(x), left(nullptr), right(nullptr){}
    TreeNode(int x, TreeNode* l, TreeNode* r): val(x), left(l), right(r){}
};

// N叉树节点结构
struct NTreeNode {
    int val;
    std::vector<NTreeNode*> nodes;
    NTreeNode(): val(0), nodes(){}
    NTreeNode(int x): val(x), nodes(){}
    NTreeNode(int x, std::vector<NTreeNode*> vec): val(x), nodes(vec){}
};

void printTreeNode(TreeNode* root);
TreeNode* createTreeNodeByArray(const std::vector<int>& arr);


#endif